/**
 * HTTP请求工具类
 */

const BASE_URL = 'http://localhost:8080'; // 替换为实际的API地址

/**
 * 统一请求方法
 * @param {Object} options 请求配置
 * @returns {Promise} 请求结果
 */
function request(options) {
  return new Promise((resolve, reject) => {
    const token = wx.getStorageSync('token');

    wx.request({
      url: `${BASE_URL}${options.url}`,
      method: options.method || 'GET',
      data: options.data,
      header: {
        'content-type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : '',
      },
      success: (res) => {
        if (res.statusCode === 401) {
          // token过期，需要重新登录
          wx.removeStorageSync('token');
          wx.redirectTo({
            url: '/pages/login/login'
          });
          reject(new Error('未授权，请重新登录'));
          return;
        }

        if (res.statusCode === 403) {
          wx.showToast({
            title: '没有权限',
            icon: 'none'
          });
          reject(new Error('没有权限'));
          return;
        }

        if (res.statusCode !== 200) {
          wx.showToast({
            title: res.data.msg || '请求失败',
            icon: 'none'
          });
          reject(new Error(res.data.msg || '请求失败'));
          return;
        }

        resolve(res.data);
      },
      fail: (err) => {
        wx.showToast({
          title: '网络错误',
          icon: 'none'
        });
        reject(err);
      }
    });
  });
}

/**
 * GET请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} 请求结果
 */
function get(url, data) {
  return request({
    url,
    method: 'GET',
    data
  });
}

/**
 * POST请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} 请求结果
 */
function post(url, data) {
  return request({
    url,
    method: 'POST',
    data
  });
}

/**
 * PUT请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} 请求结果
 */
function put(url, data) {
  return request({
    url,
    method: 'PUT',
    data
  });
}

/**
 * DELETE请求
 * @param {string} url 请求地址
 * @param {Object} data 请求参数
 * @returns {Promise} 请求结果
 */
function del(url, data) {
  return request({
    url,
    method: 'DELETE',
    data
  });
}

module.exports = {
  request,
  get,
  post,
  put,
  delete: del
}; 